v = current;
if ( v->domain != d )
v = d->vcpu[0];
- ASSERT(v != NULL);
+ ASSERT(v != NULL); /* Shouldn't have enabled shadows if we've no vcpus */
/* Stage one: walk the list of pinned pages, unpinning them */
perfc_incrc(shadow_prealloc_1);
struct vcpu *v = d->vcpu[0];
mfn_t smfn;
int i;
-
+
+ ASSERT(v != NULL);
+
/* Pass one: unpin all pinned pages */
list_for_each_backwards_safe(l,t, &d->arch.paging.shadow.pinned_shadows)
{
/* Sanity check the arguments */
if ( (d == current->domain) ||
+ d->vcpu[0] == NULL ||
shadow_mode_enabled(d) ||
((mode & PG_translate) && !(mode & PG_refcounts)) ||
((mode & PG_external) && !(mode & PG_translate)) )
return 0;
}
+ if ( unlikely(d->vcpu[0] == NULL) )
+ {
+ SHADOW_ERROR("Shadow op on a domain (%u) with no vcpus\n",
+ d->domain_id);
+ return -EINVAL;
+ }
+
switch ( sc->op )
{
case XEN_DOMCTL_SHADOW_OP_OFF:
struct vcpu *v = current;
if ( v->domain != d )
v = d->vcpu[0];
- if ( likely(paging_mode_enabled(d) && v->arch.paging.mode != NULL) )
+ if ( likely(v && paging_mode_enabled(d) && v->arch.paging.mode != NULL) )
{
return v->arch.paging.mode->write_p2m_entry(v, gfn, p, new, level);
}